/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.agileClinic.managedBean;

import br.com.agileClinic.controller.PacienteControl;
import br.com.agileClinic.modelo.Agendamento;
import br.com.agileClinic.modelo.Atendimento;
import br.com.agileClinic.modelo.Cidade;
import br.com.agileClinic.modelo.Endereco;
import br.com.agileClinic.modelo.Especialidade;
import br.com.agileClinic.modelo.EstadoCivil;
import br.com.agileClinic.modelo.Medico;
import br.com.agileClinic.modelo.Paciente;
import br.com.agileClinic.modelo.Pessoa;
import br.com.agileClinic.modelo.Raca;
import javax.inject.Named;
import javax.enterprise.context.SessionScoped;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import sun.nio.cs.ext.PCK;

/**
 * Bean gerenciado do Projeto Error on line 30, column 33 in
 * Templates/JSF/JSFManagedBean.java Expecting a string, date or number here,
 * Expression project is instead a freemarker.template.SimpleHash criado em
 * 12/06/2013
 *
 * @author Ari
 */
@Named(value = "pacienteMb")
@SessionScoped
public class PacienteMb implements Serializable {

    private List<Paciente> pacientes = new ArrayList<Paciente>();
    private List<Atendimento> atendimentos = new ArrayList<Atendimento>();
    private Paciente p = new Paciente();
    private Pessoa pessoa = new Pessoa();
    private Paciente p2 = new Paciente();
    private Paciente p3 = new Paciente();
    private Pessoa pessoa2 = new Pessoa();
    private Pessoa pessoa3 = new Pessoa();
    private Pessoa pessoa4 = new Pessoa();
    private Pessoa pessoa5 = new Pessoa();
    private Medico medico = new Medico();
    private Medico medico2 = new Medico();
    private Especialidade especialidade = new Especialidade();
    private Especialidade especialidade2 = new Especialidade();
    private Agendamento agendamento1 = new Agendamento();
    private Agendamento agendamento2 = new Agendamento();
    private Atendimento atendimento1 = new Atendimento();
    private Atendimento atendimento2 = new Atendimento();
    private String nome;
    private String cpf;
    private int cod;
    private Cidade cidade;
    private Endereco endereco;
    private Raca raca = new Raca();
    private EstadoCivil estadoCivil;

    public void popularPaciente() {
        p.setCns("1234");
        p.setId(1);
        pessoa.setNome("José Carlos Pereira");
        pessoa.setTelefone("(85)3011-0987");
        p.setPessoa(pessoa);

        p2.setCns("1234");
        p2.setId(2);
        pessoa2.setNome("Antônio da Silva Araujo");
        pessoa2.setTelefone("(85)3011-0447");

        p2.setPessoa(pessoa2);
        //p.setRaca(new Raca);

    }

    public void popularMedico() {
        especialidade.setId(1);
        especialidade.setNome("Pediatria");
        pessoa3.setNome("Raimundo Nonato");
        medico.setId(1);
        medico.setEspecialidade(especialidade);
        medico.setPessoa(pessoa3);



        especialidade2.setId(2);
        especialidade2.setNome("Cirugia");
        pessoa4.setNome("José Augusto");
        medico2.setId(2);
        medico2.setEspecialidade(especialidade);
        medico2.setPessoa(pessoa4);
    }

    public void popularAgendamento() {
        agendamento1.setDataAgendamento(new Date(2013, 11, 24));
        agendamento1.setMedico(medico);
        agendamento1.setPaciente(p);

        agendamento2.setDataAgendamento(new Date(2013, 11, 20));
        agendamento2.setMedico(medico2);
        agendamento2.setPaciente(p2);

    }

    public void popularAtendimento() {
        atendimento1.setAgendamento(agendamento1);
        atendimento1.setDataAntedimento(new Date(2013, 12, 20));

        atendimento2.setAgendamento(agendamento2);
        atendimento2.setDataAntedimento(new Date(2013, 12, 20));


        atendimentos.add(atendimento1);
        atendimentos.add(atendimento2);
    }

    /**
     * Creates a new instance of PacienteMb
     */
    public PacienteMb() {
        cidade = new Cidade();
        endereco = new Endereco();
        popularPaciente();
        popularMedico();

        popularAgendamento();
        popularAtendimento();
    }

    public void limpar() {
        p3 = new Paciente();
        cidade = new Cidade();
        endereco = new Endereco();
        pessoa5 = new Pessoa();
        raca = new Raca();
    }

    public void pesquisar() {

        if (!nome.isEmpty()) {

            if (p.getPessoa().getNome().equals(nome)) {
                pacientes.clear();
                if (!pacientes.contains(p)) {

                    pacientes.add(p);
                }
            } else {
                pacientes.remove(p);
            }

            if (p2.getPessoa().getNome().equals(nome)) {
                pacientes.clear();
                if (!pacientes.contains(p2)) {
                    pacientes.add(p2);
                }
            } else {
                pacientes.remove(p2);
            }
        } else {
            if (!pacientes.contains(p2)) {
                pacientes.add(p2);
            }
            if (!pacientes.contains(p)) {

                pacientes.add(p);
            }
        }
    }
    
    public void editar(){
        endereco = new Endereco();
        
        pacientes.remove(p3);
        endereco.setCidade(cidade);
        p3.setRaca(raca);
        p3.setEstadoCivil(estadoCivil);
      
        pessoa5.setEndereco(endereco);
        p3.setPessoa(pessoa5);



        pacientes.add(p3);



        FacesContext.getCurrentInstance().addMessage(null,
                new FacesMessage(FacesMessage.SEVERITY_INFO, "Registro de Pacinte editado com sucesso", ""));
        limpar();

    }

    public void salvar() {
        p3.setRaca(raca);
        p3.setEstadoCivil(estadoCivil);
        endereco.setCidade(cidade);
        pessoa5.setEndereco(endereco);
        p3.setPessoa(pessoa5);



        pacientes.add(p3);



        FacesContext.getCurrentInstance().addMessage(null,
                new FacesMessage(FacesMessage.SEVERITY_INFO, "Registro de Pacinte incluido com sucesso", ""));
        limpar();

    }

    public void removerPaciente() {
        pacientes.remove(p3);
        p3 = new Paciente();
        FacesContext.getCurrentInstance().addMessage(null,
                new FacesMessage(FacesMessage.SEVERITY_INFO, "Registro de Pacinte removido com sucesso", ""));
    }

    public List<Paciente> getPacientes() {
        return pacientes;
    }

    public void setPacientes(List<Paciente> pacientes) {
        this.pacientes = pacientes;
    }

    public Paciente getP() {
        return p;
    }

    public void setP(Paciente p) {
        this.p = p;
    }

    public Pessoa getPessoa() {
        return pessoa;
    }

    public void setPessoa(Pessoa pessoa) {
        this.pessoa = pessoa;
    }

    public Paciente getP2() {
        return p2;
    }

    public void setP2(Paciente p2) {
        this.p2 = p2;
    }

    public Pessoa getPessoa2() {
        return pessoa2;
    }

    public void setPessoa2(Pessoa pessoa2) {
        this.pessoa2 = pessoa2;
    }

    public Medico getMedico() {
        return medico;
    }

    public void setMedico(Medico medico) {
        this.medico = medico;
    }

    public Medico getMedico2() {
        return medico2;
    }

    public Raca getRaca() {
        return raca;
    }

    public void setRaca(Raca raca) {
        this.raca = raca;
    }

    public EstadoCivil getEstadoCivil() {
        return estadoCivil;
    }

    public void setEstadoCivil(EstadoCivil estadoCivil) {
        this.estadoCivil = estadoCivil;
    }

    public void setMedico2(Medico medico2) {
        this.medico2 = medico2;
    }

    public Especialidade getEspecialidade() {
        return especialidade;
    }

    public void setEspecialidade(Especialidade especialidade) {
        this.especialidade = especialidade;
    }

    public Especialidade getEspecialidade2() {
        return especialidade2;
    }

    public void setEspecialidade2(Especialidade especialidade2) {
        this.especialidade2 = especialidade2;
    }

    public Agendamento getAgendamento1() {
        return agendamento1;
    }

    public void setAgendamento1(Agendamento agendamento1) {
        this.agendamento1 = agendamento1;
    }

    public Agendamento getAgendamento2() {
        return agendamento2;
    }

    public void setAgendamento2(Agendamento agendamento2) {
        this.agendamento2 = agendamento2;
    }

    public Atendimento getAtendimento1() {
        return atendimento1;
    }

    public void setAtendimento1(Atendimento atendimento1) {
        this.atendimento1 = atendimento1;
    }

    public Atendimento getAtendimento2() {
        return atendimento2;
    }

    public void setAtendimento2(Atendimento atendimento2) {
        this.atendimento2 = atendimento2;
    }

    public List<Atendimento> getAtendimentos() {
        return atendimentos;
    }

    public void setAtendimentos(List<Atendimento> atendimentos) {
        this.atendimentos = atendimentos;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public String getCpf() {
        return cpf;
    }

    public void setCpf(String cpf) {
        this.cpf = cpf;
    }

    public int getCod() {
        return cod;
    }

    public void setCod(int cod) {
        this.cod = cod;
    }

    public Paciente getP3() {
        return p3;
    }

    public void setP3(Paciente p3) {
        this.p3 = p3;
    }

    public Pessoa getPessoa5() {
        return pessoa5;
    }

    public void setPessoa5(Pessoa pessoa5) {
        this.pessoa5 = pessoa5;
    }

    public Cidade getCidade() {
        return cidade;
    }

    public void setCidade(Cidade cidade) {
        this.cidade = cidade;
    }

    public Endereco getEndereco() {
        return endereco;
    }

    public void setEndereco(Endereco endereco) {
        this.endereco = endereco;
    }

    public EstadoCivil getCasado() {
        return EstadoCivil.Casado;
    }

    public EstadoCivil getSeparado() {
        return EstadoCivil.Separado;
    }

    public EstadoCivil getSolteiro() {
        return EstadoCivil.Solteiro;
    }

    public EstadoCivil getViuvo() {
        return EstadoCivil.Viuvo;
    }
}
